package com.jn.server.utils;

import cn.hutool.core.convert.Convert;
import com.jn.server.MyZhuJie.MyRequest;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 江南大学1033190417
 * @date 2022/4/10 23:01
 */
public class MyAnnotation {

    //主要是参数用户请求路径和请求方法
    public static Object getIndex(String path, String type, Map<String,Object> params) {
        try {
            Class controller = Class.forName("com.jn.server.controller.Controller");
            Method[] methods = controller.getMethods();
            for (Method method : methods) {
                if (method.isAnnotationPresent(MyRequest.class)) {
                    MyRequest annotation = method.getAnnotation(MyRequest.class);
                    String value = annotation.value();//拿到方法上的请求路径
                    String ty = annotation.type();//拿到方法上的请求方式
                    Parameter[] parameters = method.getParameters();
                    int length = parameters.length;
                    if (value.equals(path) && ty.equals(type) && length == params.size()) {//匹配正确方法
                        Object[] param = new Object[length];
                        for (int i = 0; i < length; i++) {
                            Class<?> c = parameters[i].getType();//参数类型
                            String name = parameters[i].getName();//参数名称
                            param[i] = Convert.convert(c, params.get(name));
                        }
                        Object result = method.invoke(controller.newInstance(), param);//目标方法执行
                        return result;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return null;
    }

    public static void main(String[] args) {
        Map<String,Object> param=new HashMap<>();
        param.put("name","张三");
        param.put("age","12");
        System.out.println(getIndex("index", "GET", param));
    }
}
